/*
 * wueasy - A Java Distributed Rapid Development Platform.
 * Copyright (C) 2017-2020 wueasy.com , All Rights Reserved.

 * Without permission, no one is allowed to use 
 * (including but not limited to: copying, disseminating,
 * displaying, mirroring, uploading, downloading in illegal ways);

 * Otherwise, legal liability will be investigated according to law.
 */
import java.util.Collections;

import org.apache.commons.io.FilenameUtils;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;


/**
 * mybatis自动生成
 * @author: fallsea
 * @version 1.0
 */
public class Generator {

	/**
	 * 数据库地址
	 */
	private static final String URL = "jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf-8";
	
	/**
	 * 用户名
	 */
	private static final String  USERNAME = "root";
	
	/**
	 * 密码
	 */
	private static final String PASSWORD = "123456";

	/**
	 * 作者
	 */
	private static final String AUTHOR = "fallsea";
	
	/**
	 * 父包名
	 */
	private static final String PARENT_PACKAGE = "com.wueasy.demo";
	
	/**
	 * mybatis xml路径
	 */
	private static final String MAPPER_XML_PATH = "/mybatis/demo";
	
	/**
	 * 表名称
	 */
	private static final String TABLE_NAME = "test";
	
	
    public static void main(String[] args) throws Exception {
    	
    	
    	String relativelyPath=System.getProperty("user.dir"); 
    	
    	FastAutoGenerator.create(URL, USERNAME, PASSWORD)
        .globalConfig(builder -> {
            builder.author(AUTHOR) // 设置作者
//                .fileOverride() // 覆盖已生成文件
                .disableOpenDir()
                .dateType(DateType.ONLY_DATE)
                .outputDir(FilenameUtils.normalize(relativelyPath+"/src/main/java")); // 指定输出目录
        })
        .packageConfig(builder -> {
            builder.parent(PARENT_PACKAGE) // 设置父包名
                .moduleName("") // 设置父包模块名
                .entity("entity")
                .mapper("mapper")
                .pathInfo(Collections.singletonMap(OutputFile.xml,FilenameUtils.normalize(relativelyPath+"/src/main/resources"+MAPPER_XML_PATH))); // 设置mapperXml生成路径
        })
        .strategyConfig(builder -> {
            builder.addInclude(TABLE_NAME) // 设置需要生成的表名
         // 过滤表前缀，生成的类名会去掉这个前缀
			.addTablePrefix("t_")

			// 第一阶段
			// 是否生成 entity：是
			.entityBuilder()
			// 开启lombok
			.enableLombok()
			.disableSerialVersionUID()
			// 开启实体时字段注解。 会在生成的实体类的字段上，添加注解： @TableField("nickname")
			.enableTableFieldAnnotation()
			// 设置主键Id生成策略，设置为默认的雪花算法(ASSIGN_ID)
			.idType(IdType.AUTO)
			// 会在实体类的该字段上追加注解[@TableField(value = "create_time", fill = FieldFill.INSERT)]
//			.addTableFills(new Column("create_time", FieldFill.INSERT))
			// 会在实体类的该字段上追加注解[@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)]
//			.addTableFills(new Column("update_time", FieldFill.INSERT_UPDATE))
			// 第二阶段
			.mapperBuilder()
			.enableMapperAnnotation()
			// 启用 BaseResultMap 生成。 会在 mapper.xml文件生成[通用查询映射结果]配置。
			.enableBaseResultMap()
			// 启用 BaseColumnList。 会在mapper.xml文件生成[通用查询结果列 ]配置
			.enableBaseColumnList()
			.build()
			;
        })
        .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
        .templateConfig(consumer->{
        	consumer.disable(TemplateType.CONTROLLER,TemplateType.SERVICE,TemplateType.SERVICE_IMPL).build();
        })
        .execute();
    }
    
    
}
